package controllers.letzmeet.web;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import common.facebook.FBConnect;
import common.net.HTTPRequest;

import models.common.Codes;
import models.user.User;

import play.Logger;
import play.db.jpa.GenericModel.JPAQuery;

import controllers.letzmeet.common.CommonController;

/**
 * <pre>
 * 2012.04.24
 * 웹 초기접속 페이지 처리를 담당하는 컨트롤러
 * </pre>
 * @author Bak Sang Heon
 *
 */
public class WebIndex extends CommonController {
	
	/**
	 * <pre>
	 * 페이스북 로그인을 적용한 메인화면
	 * 2012.05.11 : 신규작성 (박상헌)
	 * </pre>
	 */
	public static void main(){		
		String email = session.get("email");
		String id = session.get("user_id");
		if (email != null) {
			// 토큰 유효성 체크
			User user = User.findById(id);
			
			String accessToken = user.accessToken;
			if (accessToken == null)
				return;
			
			Date expireDate = user.expires;
			if (expireDate.before(new Date()))
				return;
		} // if
		
		render();
	} // main()
	
	/**
	 * <pre>
	 * 페이스북 로그인 후 리다이렉트될 페이지
	 * 2012.05.11 : 신규작성 (박상헌)
	 * </pre>
	 * @param code
	 */
	public static void facebookLoginRedirect(String code){
		Logger.debug("Get Code : " + code);
		
		// Get access token
		Map<String, String> map = FBConnect.getAccessToken(code);
		String access_token = map.get("access_token");
		String expires = map.get("expires");
		
		Map me = FBConnect.me(access_token);
		
		String facebook_id = (String) me.get("id");
		String name = (String) me.get("name");
		String username = (String) me.get("username");
		
		int expireDate = Integer.parseInt(expires.trim());
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.SECOND, expireDate);
		
		JPAQuery query = User.find("facebook_id = ?", facebook_id);
		List<User> userlist = query.fetch();
		User user = null;
		if (userlist.size() <= 0) {
			// 사용자가 없음. 
			// 고로 새로 등록
			user = new User();
			user.facebook_id = facebook_id;
			user.name = name;
			user.username = username;
			user.registDate = new Date();
			user.updateDate = new Date();
			user.accessToken = access_token;
			user.expires = cal.getTime();
			user.save();
		} else {
			user = query.first();
			user.accessToken = access_token;
			user.expires = cal.getTime();
			user.save();
		} // if
		
		session.put("user_id", user.id);
		session.put("facebook_id", facebook_id);
		session.put("access_token", access_token);
		
		mypage();
		//render();
	} // facebookLoginRedirect()
		
	/**
	 * <pre>
	 * 로그인 후 보여질 개인 페이지
	 * 2012.05.14 : 신규작성 (박상헌)
	 * </pre>
	 */
	public static void mypage(){
		// 세션 확인
		String user_id = session.get("user_id");
		if (user_id == null) {
			main();
			return;
		}
		Long id = Long.parseLong(user_id.trim());
		User user = User.findById(id);
		Logger.debug("User Name : " + user.name);
		
		Date expireDate = user.expires;
		
		if (expireDate.before(new Date())) {
			main();
			return;
		} // facebook session expired
		
		String username = user.username;
		String name = user.name;
		String facebook_id = user.facebook_id;
		String accessToken = user.accessToken;
		
		render(name, username, accessToken, facebook_id);
	} // index()
} // class WebIndex
